package co.edu.usbcali.dataaccess.dao;

import co.edu.usbcali.modelo.Practicante;

import java.math.BigDecimal;

import java.util.Date;
import java.util.List;
import java.util.Set;


/**
 * Interface for PracticanteDAO.
 *
 * @author Zathura Code Generator http://code.google.com/p/zathura
 */
public interface IPracticanteDAO {
    // property constants
    //public static final String  APELLIDOPRA = "apellidoPra";
    public static final String APELLIDOPRA = "apellidoPra";

    //public static final String  CELULARPRA = "celularPra";
    public static final String CELULARPRA = "celularPra";

    //public static final Long  CODPRA = "codPra";
    public static final String CODPRA = "codPra";

    //public static final String  EMAILPRA = "emailPra";
    public static final String EMAILPRA = "emailPra";

    //public static final String  JORNADAPRA = "jornadaPra";
    public static final String JORNADAPRA = "jornadaPra";

    //public static final String  NOMBREPRA = "nombrePra";
    public static final String NOMBREPRA = "nombrePra";

    //public static final Long  SEMESTREPRA = "semestrePra";
    public static final String SEMESTREPRA = "semestrePra";

    //public static final String  TELFIJOPRA = "telFijoPra";
    public static final String TELFIJOPRA = "telFijoPra";

    /**
    * Perform an initial save of a previously unsaved Practicante entity. All
    * subsequent persist actions of this entity should use the #update()
    * method. This operation must be performed within the a database
    * transaction context for the entity's data to be permanently saved to the
    * persistence store, i.e., database. This method uses the
    * {@link javax.persistence.EntityManager#persist(Object) EntityManager#persist}
    * operation.
    *
    * <pre>
    * EntityManagerHelper.beginTransaction();
    * IPracticanteDAO.save(entity);
    * EntityManagerHelper.commit();
    * </pre>
    *
    * @param entity
    *            Practicante entity to persist
    * @throws RuntimeException
    *             when the operation fails
    */
    public void save(Practicante entity);

    /**
    * Delete a persistent Practicante entity. This operation must be performed
    * within the a database transaction context for the entity's data to be
    * permanently deleted from the persistence store, i.e., database. This
    * method uses the
    * {@link javax.persistence.EntityManager#remove(Object) EntityManager#delete}
    * operation.
    *
    * <pre>
    * EntityManagerHelper.beginTransaction();
    * IPracticanteDAO.delete(entity);
    * EntityManagerHelper.commit();
    * entity = null;
    * </pre>
    *
    * @param entity
    *            Practicante entity to delete
    * @throws RuntimeException
    *             when the operation fails
    */
    public void delete(Practicante entity);

    /**
    * Persist a previously saved Practicante entity and return it or a copy of it
    * to the sender. A copy of the Practicante entity parameter is returned when
    * the JPA persistence mechanism has not previously been tracking the
    * updated entity. This operation must be performed within the a database
    * transaction context for the entity's data to be permanently saved to the
    * persistence store, i.e., database. This method uses the
    * {@link javax.persistence.EntityManager#merge(Object) EntityManager#merge}
    * operation.
    *
    * <pre>
    * EntityManagerHelper.beginTransaction();
    * entity = IPracticanteDAO.update(entity);
    * EntityManagerHelper.commit();
    * </pre>
    *
    * @param entity
    *            Practicante entity to update
    * @return Practicante the persisted Practicante entity instance, may not be the
    *         same
    * @throws RuntimeException
    *             if the operation fails
    */
    public Practicante update(Practicante entity);

    public Practicante findById(Long id);

    /**
    * Find all Practicante entities with a specific property value.
    *
    * @param propertyName
    *            the name of the Practicante property to query
    * @param value
    *            the property value to match
    * @param rowStartIdxAndCount
    *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    *            row index in the query result-set to begin collecting the
    *            results. rowStartIdxAndCount[1] specifies the the maximum
    *            count of results to return.
    * @return List<Practicante> found by query
        */
    public List<Practicante> findByProperty(String propertyName, Object value,
        int... rowStartIdxAndCount);

    public List<Practicante> findByCriteria(String whereCondition);

    public List<Practicante> findByApellidoPra(Object apellidoPra);

    public List<Practicante> findByApellidoPra(Object apellidoPra,
        int... rowStartIdxAndCount);

    public List<Practicante> findByCelularPra(Object celularPra);

    public List<Practicante> findByCelularPra(Object celularPra,
        int... rowStartIdxAndCount);

    public List<Practicante> findByCodPra(Object codPra);

    public List<Practicante> findByCodPra(Object codPra,
        int... rowStartIdxAndCount);

    public List<Practicante> findByEmailPra(Object emailPra);

    public List<Practicante> findByEmailPra(Object emailPra,
        int... rowStartIdxAndCount);

    public List<Practicante> findByJornadaPra(Object jornadaPra);

    public List<Practicante> findByJornadaPra(Object jornadaPra,
        int... rowStartIdxAndCount);

    public List<Practicante> findByNombrePra(Object nombrePra);

    public List<Practicante> findByNombrePra(Object nombrePra,
        int... rowStartIdxAndCount);

    public List<Practicante> findBySemestrePra(Object semestrePra);

    public List<Practicante> findBySemestrePra(Object semestrePra,
        int... rowStartIdxAndCount);

    public List<Practicante> findByTelFijoPra(Object telFijoPra);

    public List<Practicante> findByTelFijoPra(Object telFijoPra,
        int... rowStartIdxAndCount);

    /**
    * Find all Practicante entities.
    *
    * @param rowStartIdxAndCount
    *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    *            row index in the query result-set to begin collecting the
    *            results. rowStartIdxAndCount[1] specifies the the maximum
    *            count of results to return.
    * @return List<Practicante> all Practicante entities
    */
    public List<Practicante> findAll(int... rowStartIdxAndCount);

    public List<Practicante> findPagePracticante(String sortColumnName,
        boolean sortAscending, int startRow, int maxResults);

    public Long findTotalNumberPracticante();
}
